Distributed data distribution

ABSTRACT

Data may be distributed using data carousels. After a device receives the data, or a portion thereof, the device may make available a data carousel that allows others to receive the data. Each data carousel may contain a portion of the data. Data carousels may also contain error correction information that can be used to reconstruct missing portions of the data being distributed. A carousel directory may keep track of the carousel structure and direct the behavior of devices that are receiving data and/or distributing data.

BACKGROUND

When a data file is distributed from a server, that server may becomeoverloaded when a large number of users seek the file. The load from alarge number of users may be distributed among multiple computers usingpeer-to-peer (P2P) networking technologies. Although P2P technologiesspread the load of distributing a file across multiple hosts, they maynot reduce the total amount of network bandwidth needed to distribute afile because each user still may receive its own dedicated transmissionof the file from the hosts. There is a need for data distributionmethods that are more scalable and efficient.

SUMMARY

According to one aspect of the disclosure, a device may identify aplurality of data carousels, each of which may multicast data. Thecarousels may each contain a portion of a file. The device may receivethe file by accessing some or all of the carousels in the plurality ofdata carousels. The carousels may be accessed sequentially and/orsimultaneously.

According to another aspect of the disclosure, data received from a datacarousel may be evaluated, and missing portions may be identified.Missing portions may be downloaded from a data carousel. Missingportions may also be reconstructed using error correction information,which may be (or have been) received from a data carousel. The errorcorrection information may be organized such that a block of errorcorrection information can be used to reconstruct any one block of anoriginal file.

According to a further aspect of the disclosure, a device may choosewhich data carousels to access based on determining the combination ofcarousels that is expected to provide the highest throughput ofnon-duplicative information. Information may be duplicative because itis expected to be transmitted from another carousel that a device isaccessing. Information may also be duplicative because it was alreadyreceived.

According to yet another aspect of the disclosure, a carousel directorymay store a listing of carousels containing all or a portion of a file.A carousel directory may be implemented as a dedicated device, or acarousel directory may be implemented on a device that also hosts one ormore carousels. There may be more than one carousel directory per file.Every device that hosts a carousel containing a portion of a file mayact as a carousel directory for the file. Devices that do not host acarousel containing a portion of the file may also act as a carouseldirectory for the file.

According to a still further aspect of the disclosure, a carouseldirectory may organize which portions of a file appear, reside, or arestored in the carousel(s) hosted by each device. A carousel directorymay organize the carousels in accordance with a data set that definesthe topology of a tree-like structure of carousels. Each level of a treemay enable an entire file to be transmitted, and each level of the treemay distribute the file over a greater number of carousels than theprevious level. The portion of a file transmitted in a carousel from adevice may be changed in order to adjust to changes in the tree, such asanother carousel becoming available or unavailable.

The preceding presents a simplified summary in order to provide a basicunderstanding of some aspects of the disclosure. The summary is not anextensive overview of the disclosure. It is intended neither to identifykey or critical elements of the disclosure nor to delineate the scope ofthe disclosure. The summary merely presents some concepts of thedisclosure in a simplified form as a prelude to the description below.

BRIEF DESCRIPTION OF THE DRAWINGS

The present disclosure is illustrated by way of example and is notlimited in the accompanying figures.

FIGS. 1 a-1 c illustrate several examples of data carousels.

FIG. 2 illustrates an example of how files may be accessed from aplurality of carousels.

FIG. 3 a illustrates a method that may be performed by a carouseldirectory.

FIG. 3 b illustrates an example of a file that generally describes data.

FIG. 4 illustrates an example of a data carousel architecture.

FIG. 5 illustrates an example of data carousels.

FIG. 6 shows a table that illustrates an example of a distribution ofcarousel sizes according to upload bandwidth.

FIG. 7 illustrates a method of obtaining data from data carousels.

FIG. 8 illustrates an example computing device on which various methodsand devices of the disclosure may be implemented.

DETAILED DESCRIPTION

In the following description reference is made to the accompanyingdrawings, which form a part hereof, and in which is shown, by way ofillustration, various embodiments in which aspects of the disclosure maybe practiced. It is to be understood that other embodiments may beutilized, and structural and functional modifications may be made,without departing from the scope of the present disclosure.

FIG. 1 a illustrates data carousel 101, which may be a continuous,repeating transmission (e.g., stream) of data. Although the term“carousel” is used, the disclosure covers and is applicable to otherconcepts for delivering data in a continuous style. Because the datatransmitted from data carousel 101 repeats, data carousel 101 isillustrated as a loop. The term “multicast data carousel” refers to adata carousel from which data is transmitted using multicasttransmission. Data carousel 101 may be a multicast data carousel, or itmay transmit data using other techniques, such as unicast, broadcast,etc. The data in a data carousel may be transmitted from a computingdevice, such as a server, to another device, such as a client, or it maybe transmitted to any number of devices. As illustrated in FIG. 1 a,transmission or access to of all of the data in carousel 101 may occurbetween times T₀ and T₈. The same portion of the data (100 a) that wastransmitted beginning at time T₀ is transmitted again beginning at timeT₈. Similarly, data portion 100 b is transmitted beginning at time T₁and again beginning at time T₉, data portion 100 c is transmittedbeginning at time T₂ and again beginning at time T₁₀, etc.

Data 100 may be a file, such as a video file, an audio file, a computerprogram, a collection of smaller files, etc. All of data 100 may beobtained by accessing (e.g., subscribing to) carousel 101 for the lengthof the carousel. A device may begin receiving data from a carousel atany time. For example, a device may begin receiving data from carousel101 at time T₅. All of data 100 may be received by continuing to accessdata carousel 101 until time T₁₃. Data 100 may be put into its originalorder after it is received.

FIG. 1 b illustrates two data carousels (110 and 111). Data carousel 110contains one half of data 100, and data carousel 111 contains the otherhalf. Data from carousels 101, 110, and 111 may be transmitted at thesame rate (e.g., 1 Mbps). Thus, if a client receives data from carousels110 and 111 simultaneously, all of data 100 may be obtained in half thetime it would have taken to receive all of data 100 from carousel 101.

FIG. 1 c illustrates three data carousels (120-122), each of whichcontains one quarter of data 100. The data in carousels 120-122 maytransmit data at twice the rate (e.g. 2 Mbps) as the data in carousels100, 110, and 111 of FIGS. 1 a and 1 b. Consequently, accessingcarousels 120-122 simultaneously allows data to be obtained at six timesthe rate it is transmitted from carousel 101.

A carousel containing portions 100 a and 100 b of data 100 is not shownin FIG. 1 c. A carousel containing only data portions 100 a and 100 bmay not be available. Even if a carousel containing only data portions100 a and 100 b is available, a client may not be able to receive itsdata. For example, the data connection between the client and one ormore carousels may be too slow and/or congested to allow for the datafrom the carousel to be received. The data connection may be too slow inabsolute terms. The data connection may also be too slow due to othertraffic, such as the traffic from carousels 120-122 or other networkissues.

Portions 100 a and 100 b, may be obtained, for example, from carousel110 of FIG. 1 b. Depending on the time a device first accesses carousel110, all of data 100 may still be obtained faster by accessing tocarousels 120-122 and 110 then by exclusively accessing carousels 110and 111.

As the examples above illustrate, data, such as data 100, may bereceived from a variety of carousels. The carousels may be selectedbased on the portions of the data available on the carousels and/or thetransmission rates of the available carousels. Where the data to bereceived spans multiple carousels, the data may be received from thosecarousels in a parallel manner and/or in a sequential manner. Forexample, a client may accesses a single carousel, and then access adifferent carousel. Another example is that a client may access a firstgroup of carousels simultaneously, and then access a second group ofcarousels simultaneously. In some cases the second group of carouselsmay include one or more carousels that are also in the first group. Amore detailed example of how a client or user may select which datacarousels to access is discussed below with reference to FIG. 7.

As illustrated above, one advantage of using carousels, such asmulticast carousels, is that clients may obtain data faster. Anotheradvantage is that the load of transmitting a file may be spread acrossmultiple devices. A further advantage is that the total bandwidth neededto distribute a file may be reduced. For example, only one copy of thedata transmitted from a carousel may exist on the network link thatconnects to the device hosting a carousel, even though the data from thecarousel may ultimately reach multiple clients. If unicast were usedinstead of multicast for transmission from the carousel, several copiesof the data (one for each of the multiple clients) would exist on thenetwork link that connects to the device transmitting the data.Nevertheless, the principles described herein may also be practicedwithout requiring multicast transmission in every case.

FIG. 2 illustrates an example of how data may be downloaded from aplurality of carousels. A client, such as client A, may communicate withcarousel directory 201 in order to learn which carousels may be accessedin order to download a file, such as File C. A carousel directory maykeep track of which carousels currently exist or are available. Acarousel directory may also instruct devices to provide (e.g. host)carousels. As illustrated, client A accesses carousels 220, 221, and 222in order to receive File C. Client A learned of at least these carouselsfrom carousel directory 201. Another client, such as client B, may alsocontact carousel directory 201 in order to learn which carousels may beaccessed in order to download a file. As illustrated, client B accessescarousels 223 and 224. Client B is located within device 210. Device 210also hosts carousels 225 and 226, which may be accessed by otherclients. For example, client C accesses carousels 222, 225, and 226 inorder to obtain a file. Although illustrated as a separate device inFIG. 2, a carousel directory can be located in a device, such as device210, that also hosts carousels and/or accesses carousels from otherdevices. A carousel directory may organize carousels into a tree-likestructure or other structure, as will be discussed in more detail belowwith respect to FIG. 4.

FIG. 3 a illustrates a method that may be performed by a carouseldirectory. In step 301, the carousel directory receives informationdescribing the topology of a group of carousels. The topologyinformation may be received from a user or from another computer. Thecarousels, which may be deployed in a tree-like architecture, may notexist yet. In some embodiments, a carousel directory manages thecreation of carousels such that the carousels that do exist conform tothe specified topology. The topology of an example involving a tree ofcarousels is discussed in more detail below with respect to FIG. 4.Other topologies or layouts may also be used.

In step 303, the carousel directory is made available to users. This mayinclude making the carousel directory responsive to messages from otherdevices. It also may include allowing other devices to locate thecarousel directory by publishing contact information for the carouseldirectory. For example, a DNS record may be created that allows a DNSlookup to return contact information for the carousel directory, such asan IP address or other network address. The DNS lookup may be one thatspecifies a specific file, such as a movie or video game. The DNSlookups for several files may resolve to the same device, as a devicemay act as a carousel directory for more than one file. The contactinformation may be contained in, for example, a text record of a DNSentry. Alternatively, or in addition, a website or other resource may bepublished that contains a link to a carousel directory.

For example, a file that generally describes the data to be downloadedmay contain a link to a carousel directory. An example of a descriptivefile (350) is illustrated in FIG. 3 b. This example has three fields,but more or less information may be included in other examples ofdescriptive files. Field 351 of file 350 includes data such as textdescribing the file to be downloaded, which is file 360 in this example.Field 352 includes contact information for a carousel directory for file360. This contact information may be, for example, an IP address. Field353 includes hashes of blocks of file 360. The hashes can be used toverify the integrity of the downloaded information. File 350 may alsoinclude further information, such as a digital signature identifying thesource of file 360.

Instead of requiring clients to seek information about a carouseldirectory, a service provider may push contact information for carouseldirectories to clients. Similarly, a service provider may pushdescriptions of available files, such as descriptive file 350, toclients. Further, in some embodiments a carousel directory may pushcontact information for one or more carousels to clients.

In step 305, the carousel directory receives information, e.g. reports,concerning the availability of each carousel. The first time step 305 isexecuted, there may not be any existing or available carousels or theonly existing carousel may be hosted by the carousel directory itselfEven if there are no existing carousels, the carousel directory mayreceive reports from other devices indicating whether the file thecarousel directory is monitoring is available from the other devices. Ifso, the carousel directory may instruct some or all of the other devicesto provide carousels containing portions of the file (or all of thefile) in step 311. The carousel directory may also instruct the devicesas to how quickly to transmit data from each carousel. Similarly, thedevice hosting the carousel directory may begin transmitting one or morecarousels, which may each contain the file or a portion of the file. Theportion of the file to be included in each carousel may be chosen suchthat the new carousel allows the set of all carousels to conform to thetopology information received in step 301. The topology informationreceived in step 301 may also govern whether a new carousel is added oran existing carousel is altered or removed.

In step 307, the carousel directory is contacted by a device, such as acomputer, set-top box, mobile telephone, or other computing device,which may receive the file. The device may relay a message requestinginformation about how to download the file. In response, the carouseldirectory may send information about the carousel(s) hosting the file tothe device in step 309. The carousel directory may send informationabout all of the carousels. Alternatively, the carousel directory maysend information about only some of the carousels, thereby directing thedevice to use only certain carousels to receive the file. Examples ofinformation about the carousels include IP addresses and port numbers,such as a multicast subscription address, URLs, or other network names,the portions of the file included in each carousel, the speed of eachcarousel, a schedule of when each portion of the data in a carousel willbe transmitted from the carousel, the portion of a carousel's data thatis currently being transmitted, historical availability of the devicehosting a carousel, future planned changes to a carousel (e.g. changesin speed or changes in what content is included in the carousel), etc.

As a device receives the file, it may update the carousel directory asto the amount of the file that it has received. This information may bereceived in step 305, which may be performed on a continual basis. Adevice downloading a file may also send subsequent requests forinformation about the carousels in step 307. For example, the device mayneed an updated list of carousels, as some carousels may have becomeunavailable, new carousels may have become available, and existingcarousels may have changed (e.g. a carousel's speed may have changed orthe portion of the file included in a carousel may have changed). Thecarousel directory may also send such updates automatically. Manydevices may download a file simultaneously. Thus, a carousel directorymay perform steps 307 and 309 in parallel for a number of differentdevices.

The carousel directory may instruct that the carousels include a versionnumber (or other identifier) of the current tree (or other topology) ofcarousels in step 311. The clients that receive data from the carouselswould know whether the tree of carousels has changed by checking whetherthe version number has changed. Clients may use cached data, which wassent in step 309, until a change in the version number of the tree ofcarousels is detected. Once the new version number is detected, theclient may request the updated information. This request may be receivedby the carousel directory in step 307.

As more devices download or otherwise access the file, those devices maybe instructed to provide carousels that transmit all or a portion of thefile in step 311. A carousel directory may periodically poll thosedevices to ensure they are still available and providing the carouselsas part of step 305. If a carousel has become unavailable, the carouseldirectory may instruct a new device to provide the carousels that becameunavailable in step 309. Further, a carousel directory may instruct somedevices to stop providing one portion of the data and to begin providinganother portion of the data. Dynamic re-organization of the carouselsmay be performed in order to maintain the organization of the carouselsaccording to the topology information received in step 301 or to changethe topology of the carousels to a more efficient topology.

In some embodiments, a device may provide a carousel without beinginstructed to do so by a carousel directory. For example, a device mayanalyze the information sent from a carousel directory in step 309 and,based on the information, determine that it will provide a new carousel.The device may determine the properties of the new carousel, such as thecarousel's contents and speed. In some embodiments, the device may baseits determinations on the same topology information that the carouseldirectory received in step 301. Further, in some embodiments, a carouseldirectory may not perform step 311 because, for example, each deviceindependently determines which carousels to provide. Each device mayreport the carousels it is providing to the carousel directory.

The operation of a carousel directory may be decentralized. For example,each client may also be able to track existing carousels, instruct thatcarousels be brought online, specify the contents or speed of acarousel, etc. Having each client serve as a carousel directory mayallow for an existing carousel directory to become unavailable withoutaffecting the availability of a file.

FIG. 4 illustrates an example of a tree topology of data carousels. Thisexample shows how the data of a file may be distributed across severaldata carousels. Each data carousel may be located on a separate device,but some devices may host multiple carousels. Hosting multiple carouselson a single device may be advantageous where a device has access to alot of bandwidth or other network resources. By hosting multiplecarousels, each carousel may transmit data at a slower rate, therebyenabling devices with less bandwidth available to them to keep up withat least some of the carousels.

In the example shown in FIG. 4, each carousel transmits a portion ofdata 100, which may be, for example, a file. Carousel 400 contains allof data 100. Carousel 400 may be, for example, the carousel illustratedin FIG. 1 a. Carousels 410 and 411 each contain half of data 100.Carousels 410 and 411 may be, for example, carousel 110 and 111 of FIG.1 b. Carousels 420-424 of FIG. 4 each contain one fifth of data 100.Carousels 430-440 each contain one tenth of data 100.

A device may begin transmitting data in a carousel even before it hasreceived all of data 100. For example, a device may transmit a carouselcontaining data portions 100 e-h of data 100 even before it has receiveddata portion 100 a. A device may have received data 100 (or a portionthereof) from carousels transmitted by other devices. For example, thedevice transmitting carousel 420 may have received data 100 from anycombination of carousels 400-411. A device may receive data 100 fromanother source, including other carousels shown in in FIG. 4 andcarousels that are no longer available. Other examples of sources fromwhich a device may receive data 100 include non-carousel transmissionsfrom other devices and magnetic or optical media, such as hard drives oroptical discs.

As was illustrated with respect of FIGS. 1 a-1 c, dividing data 100across multiple carousels may increase the speed with which it may bedownloaded. Conversely, transmitting new carousels that do not dividedata 100 may increase the likely availability of the data. For example,if carousels 420-424 were the only carousels available, then the loss ofany of these carousels would make it impossible to receive all of data100. The existence of other carousels, such as carousels 400, 410-411,and 430-440 increases the likelihood that all of data 100 will remainavailable even if certain carousels become unavailable.

Organizing data carousels into a tree-type topology, such as the oneillustrated in FIG. 4, balances speed of data distribution withavailability of the data. In the example of FIG. 4, the number ofcarousels increases by 2.2 at each level. Levels of the tree areseparated by horizontal lines in FIG. 4. The actual number of carouselsin each level may be rounded to the nearest whole number. Thus thesecond level contains 2 carousels (2.2 rounded to 2), the third levelcontains 5 carousels (2.2*2.2=4.84, rounded to 5), and the fourth(bottom) level contains 11 carousels (4.84*2.2=10.648, rounded to 11).FIG. 4 is merely an example, and a different number of carousels mayexist at each level of the tree.

The size of the data carousels at each level of the tree may be afunction of the number of carousels at that level of the tree and thenumber of copies of data 100 included at that level of the tree. Thedata carousels at each level may, in combination, provide all of data100. For example, carousels 410 and 411 each transmit half of data 100and carousels 420-424 each transmit a fifth of data 100. Carousels430-440 each transmit 1/10 of data 100. The data carousels at each levelmay, in combination, provide multiple copies of data 100. For example,each carousel of a level containing 10 data carousels include ⅕ of data100, resulting in two copies of data 100 at this level.

A fractional number of copies of data 100 may also exist at a level. Forexample, there are 11 carousels at the bottom level of the treeillustrated in FIG. 4, and each contains 1/10 of data 100. Thus 1.1copies of data 100 exists at the bottom level of the tree illustrated inFIG. 2. Including more than one copy of data 100 at a level may be doneto reduce the likelihood of data unavailability at any level of thetree. For example, all of data 100 may be available from the carouselsat the bottom level of the tree illustrated in FIG. 4 even if one of thecarousels becomes unavailable. It is also possible that a level may notinclude all of data 100. This may be preferable where, for example, thedevices that would be needed to include all of data 100 at the level donot yet have data 100 or are otherwise unavailable.

The number of copies of data 100 may vary by level. For example, dataavailability may be emphasized by including five copies of data 100 atthe top level of a tree. The top level of this tree may include, forexample, five separate carousels, each containing all of data 100.)Lower levels of a tree may emphasize data availability less by, forexample, including only 1.2 copies of data 100 per level.

A tree may have a maximum depth. When this depth is reached, additionalcarousels may be added to the bottom level of the tree, even if doing soincreases the number of carousels in the bottom level of the tree beyondthe number of carousels per level used to define the rest of the tree.There may be a maximum number of carousels that may be added to thebottom level of the tree. This maximum number may be defined by thenumber of carousels per level or it may be defined by a separate number.Once the maximum number of carousels is reached, additional carouselsmay not be created. This allows a device to, for example, transmit datathat corresponds to a different file instead of duplicativelytransmitting a portion of data 100.

A minimum data carousel size may be defined. A minimum data carouselsize may indirectly define a maximum depth of the tree because any thecarousels in any lower levels of the tree would be smaller than theminimum data carousel size. For example, if 1/11 of the total datacorresponds to the minimum data carousel size, then no lower levels ofthe tree shown in FIG. 4 may be created because any lower levels wouldhave carousels that are smaller than the minimum size.

Levels of a tree may be created as the tree grows, but skipped over astime goes on. For example, carousels 400, 410, or 411 of FIG. 4 may notbe replaced if they become unavailable, whereas other carousels, (suchas, for example, carousels 430-440) may be replaced if they becomeunavailable. Further, the device transmitting one of carousels 400, 410,or 411 may be instructed to stop transmitting that carousel in order toreplace one of carousels 430-440. Other properties of a tree may alsovary as the tree grows. For example, the number of carousels on eachlevel of the tree may increase as the total number of carouselsincreases.

Although data from some carousels may be transmitted at a specificspeed, data from other carousels may be transmitted at the maximum speedallowed by a device's network connection or by a user's preferences.Alternatively, the speed with which data from a carousel is transmittedmay be selected, by the transmitting device and/or by a carouseldirectory, based on the speed at which the carousel's recipients mayreceive data 100. For example, if carousel 400 is the first carouselfrom which data 100 is transmitted, data 100 may be transmitted at aspeed that the devices hosting carousels 410 and 411 can keep up with.The device hosting carousel 400 may also adjust the speed of itscarousel once additional carousels, such as carousels 410 and 411,become available.

Rules governing the topology of the tree (such as the propertiesdiscussed above, including the number of carousels per level, the numberof copies of the file per level, and the maximum depth of the tree) maybe defined by the first device to distribute a file on the network.These rules may be used by carousel directories to identify which newcarousels should be added. The file being distributed, or a relatedfile, may include the rules governing the topology of the tree. Wherethe rules, or any portion of the rules, are missing, default rules maygovern. In some cases, default rules may override rules provided by thedistributor of the file. For example, an internet service provider'sdevices may always transmit one or more carousels containing a certainamount of the original data and/or transmit data at a certain speed.This may be advantageous because, for example, these devices may becomeunavailable less frequently than other devices.

In some embodiments, more than one device may act as a carouseldirectory for a file. For example, in some embodiments all of thedevices may track the organization of the tree. This may allow eachdevice to select which portions of data 100 to include in a datacarousel without receiving instructions from other devices.

A user or client accessing a data carousel may not be able to receiveall of the data in the carousel. For example, a device transmitting datain a carousel may become unavailable before all of the data in thecarousel is received. Another example of why a client may not be able toreceive all of the data in the carousel is network congestion betweenthe sender of the data carousel and the client. Similarly, portions ofthe data may be corrupted in transit. Data corruption may be detected,for example, by comparing a hash of the received data to a portion ofthe received data that indicates what the hash should be. If thesehashes do not match, then the data was corrupted in transit. Errorcorrecting codes, such as Reed-Solomon codes, may also be used toidentify corrupted data.

The provider of a data carousel may not respond to requests forretransmission of missing or corrupted data. For example, data from acarousel may be transmitted in a multicast or broadcast fashion suchthat the provider of the carousel does not expect to receive trafficfrom recipients of the carousel. For example, a data carousel may bemulticast using protocols such as Internet Group Management Protocol(IGMP).

A client may correct for missing or corrupted data by waiting for thesame data to be transmitted again from the same carousel or from anothercarousel. However, the missing or corrupted data may be obtained fasterby reconstructing the missing or corrupted portions using errorcorrection information. The PAR file format used by the parchive opensource software project contains an example of error correctioninformation. The parchive format includes index files, which containerror detection information (such as a hashes of sections of theoriginal data) and also error correction files, which include errorcorrection information. The error correction information in the parchiveformat may be Reed-Solomon error correcting codes, which are generatedfrom the original data. Other error correcting codes may also be used.

Where the error correction data format chosen is a Reed-Solomon errorcorrecting code or a similar error correcting code, a single block oferror correction information may be usable to correct or reconstruct anyblock of the received data. Further, any second block of errorcorrection information may be usable to correct or reconstruct anysecond block of the received data, any third block of error correctioninformation may be usable to correct or reconstruct any third block ofthe received data, etc.

Error correction information may be distributed in a unicast fashion.For example, a client may make a request for X blocks of errorcorrection information, where X is the number of blocks of the file theclient is missing, and X blocks of error correction information may thenbe sent from a server. Error correction information may also bedistributed in carousels. The error correction information may bedistributed in the same carousels as the file, or it may be distributedin one or more separate carousels from the file. These separatecarousels may contain dedicated error detection information, such ashashes of the original data, but including dedicated error detectioninformation is not necessary. A client may access an error correctioncarousel, which transmits error correction information, at any time. Ifthe error correction information is in a format where a block of errorcorrection information can be used to correct an error occurringanywhere in the received data, then every block of error correctioninformation received from the error correction carousel may be used torepair or construct a portion of the original data. Thus, receivingerror correction information from an error correction carousel andreconstructing a missing or corrupted block of the original data usingthe error correction information may be faster than waiting for themissing or corrupted block of original data to be transmitted from acarousel. A device may choose to reconstruct a block from errorcorrection information even if it never attempted to download the blockin its original form. This may occur to save time, because the block isnot available in its original form, as a matter of preference, or forany other reason.

Similar to how including more than one copy of a file in a level of thetree of carousels may enhance data availability, including errorcorrection information in carousels may enhance data availability. Inboth cases, the portion of the data that was distributed from a carouselthat goes offline may be obtained from another source.

FIG. 5 illustrates an example of two carousels: one that includes aportion of a file in its original form and one that includes errorcorrection information. As shown in FIG. 5, data 500 may be transmittedin carousel 510, and error correction information 501 may be transmittedin error correction carousel 511. Error correction information 501 maybe calculated from data 500, or it may be received from another source,such as another error correction carousel. As illustrated in FIG. 5,there is less error correction information than original data. This isbecause a maximum number of transmission or other errors in the originaldata may be assumed, and error correction information enablingcorrection beyond this maximum number of errors need not be provided. Ifadditional errors do occur, the missing data can be obtained from acarousel that transmits the original data. A carousel directory mayadjust the amount of error correction information provided in responseto feedback from clients on the amount of error correction informationneeded to obtain all of the original data.

Although a single device may transmit data from both a regular data andan error correction carousel, individual devices may also transmit onlyone type of carousel. For example, a tree of error correction carouselsmay be constructed in parallel with a tree of original data carousels.Both trees may have structures similar to those discussed above withrespect to FIG. 4. The error correction tree may have a differentstructure, such as a different maximum depth, than the original datatree. The relationship between the original topology and the errorcorrection topology may be predefined. Alternatively, the relationshipmay be specified (or a default may be overridden) by data associatedwith the original data file.

Alternatively, a single tree or other topology may be used for both theoriginal data and the error correction information. Each level of thetree may include error correction carousels. Optionally, errorcorrection carousels may appear on some, but not all, levels of thetree.

Instead of dividing the amount of data to be transmitted from eachcarousel evenly across the carousels at each level of a tree, the amountof data to be transmitted from each carousel may be determined based onother factors, such as upload bandwidth (e.g., the bandwidth at whicheach carousel is able to transmit data).

FIG. 6 shows a table that illustrates an example of a distribution ofcarousel sizes according to upload bandwidth capabilities. In thisexample, the total upload bandwidth of the five devices (601-605) is 165Mbps. The carousel size for each device may be calculated by taking itsupload bandwidth and dividing it by the total upload bandwidth (165Mbps). For example, the calculation for device 601 is 20 Mbps uploadbandwidth/165 Mbps total bandwidth=12%. Thus, device 601 will host acarousel that is 12% of the total size of the data being distributed.The error correction information may be handled by additional devices.Alternatively, the total size of the data may include error correctioninformation. Further, the error correction information may be weightedmore heavily than the original data when determining the total datasize. For example, the data may total 925 MB, and the error correctioninformation may total 25 MB. If the error correction information isweighted three times more heavily than the data, then the total datasize is 925 MB+3* 25 MB=1000 MB. Device 601, for example, would transmit120 MB of data in its carousels (12% of 1000 MB). This may be 120 MB ofany type of data. In one example, device 601 may host two carousels: adata carousel of 111 MB (12% of 925 MB) and an error correctioninformation carousel of 9 MB (12% of 3*25 MB). In this example, the datacarousel and the error correction carousel may be available from device601 on different IP addresses and/or different ports.

FIG. 7 illustrates a method of obtaining a file from data carousels,such as the ones illustrated in FIG. 4. First, in step 701, thecarousels hosting the desired file are identified. This may beaccomplished by consulting a carousel directory for the file. Thecarousel directory may identify, for example, each carousel, the speedwith which the data in each carousel is transmitted, the portion of thefile (and/or error correction information) included in each carousel,and where each carousel is in its transmission cycle (e.g. block m outof a total of n). Knowing where each carousel is in its transmissioncycle allows a client to calculate how long it has to wait until anyparticular block of data is transmitted from the carousel.

In step 703, the missing portions of the file are identified. When afile is first being downloaded, all of the data may be missing. In step705, it is determined if enough information has been obtained toreconstitute the file. If not, then in step 707 one or more carouselsproviding the data that is still needed are identified. Where the neededdata is available from multiple carousels, step 707 may includeselecting which carousel(s) to access. This may be done by identifyingeach carousel that supplies needed data and determining whichcombination of those carousels will most effectively use the downloadbandwidth that is available. For example, if 50 Mbps of bandwidth isavailable for use in downloading data 100, and carousels aretransmitting needed data at 20 Mbps, 25 Mbps, 30 Mbps, and 40 Mbps, thenthe 20 Mbps and 30 Mbps carousels may be selected. This combination usesall of the available bandwidth, whereas other combinations use only someof the available bandwidth or exceed the available bandwidth.

If a data carousel includes some information that is still needed butsome information that has already been downloaded, that carousel may beignored in favor of a carousel that includes only needed information.Combinations of carousels may be ranked by the expected throughput ofneeded data. For example, each combination of carousels that transmitsdata, in combination, at the available download bandwidth or less may beranked according to the expected speed with which useful information(e.g. non-duplicative information) will be obtained from thosecarousels. The amount of non-duplicative information is the total amountof information transmitted from the combination of carousels, less anydata that overlaps between the carousels, and less any data that hasalready been downloaded. The combination of carousels selected in step707 may be the combination that delivers the largest amount ofnon-duplicative information per a given period of time.

Because nearby devices generally have lower latency and betterthroughput than devices that are more distant, carousels from nearbydevices may be more likely to be identified in step 707 than carouselsfrom more distant devices.

Once a significant amount of the data has been obtained, errorcorrection carousels may tend to transmit the largest amount of usefulinformation in a given period of time. This is because any piece oferror correction information that has not already been downloaded may beuseful for recovering missing blocks of data 100, but original datacarousels may include information that is mostly duplicative of what hasalready been downloaded. Thus, the carousels identified in step 707 mayinclude a greater number of error correction carousels once the majorityof a file has been obtained.

In step 709, the carousels identified in step 709 are accessed in orderto obtain data from them.

Once all the data from one or more carousels has been obtained, step 703is repeated by identifying any missing portions of the data. This stepmay be performed simultaneously with receiving data from other datacarousels. Where data is already being received from some carousels, theset of carousels identified in step 707 may include only additionalcarousels. Alternatively, the set of carousels identified in step 707may not include the carousel(s) currently being accessed. If this is thecase, the carousel(s) currently being accessed may be dropped (e.g.,unsubscribed from) in favor of new carousels, which, in combination, areexpected to allow for more efficient downloading of the file. Thetransition from accessing a first set of carousels to accessing a secondset of carousels may occur instantly. In some embodiments, the second(or third, fourth, etc.) set of carousels may be identified in advance,and the transition to the next set of carousels may occur at a scheduledtime, such as when all the data from one or more carousels has beenreceived or when transitioning to the next set of carousels is firstexpected to allow for more efficient downloading of the file.

Where carousels are accessed by explicitly subscribing to them,carousels that are no longer being subscribed to may be explicitlyunsubscribed from. Alternatively, where supported by the transmissionprotocols being used, a client may access only a portion of a carouselby specifying only the portions of a carousel that the client wishes toreceive. Any unspecified portions of the carousel may not be sent by theupstream router. The portions of the carousel the client wishes toreceive may be specified by, for example, sequence numbers, transmittaltimes, hashes of the data, any other identifiers or uniquecharacteristics of the data, or any other identifiers or uniquecharacteristics of packets or other structures that contain the data.

Identifying the missing portions of data in step 703 may includeverifying the received data. Blocks of data for which a transmissionerror has been identified may be considered missing data, as that datastill needs to be re-downloaded or regenerated using error correctioninformation.

In step 705, it is determined whether the combination of downloadedoriginal information and downloaded error correction informationdescribes the entire file. If so, then in step 711 any error correctioninformation may be used, in conjunction with the original downloadedinformation, to produce a complete copy of the file. (If the entire fileis present, then no error correction information may be needed.)

Some systems do not allow data to be multicast or broadcast acrossnetwork boundaries. Where multicast or broadcast data carousels are usedand multicast or broadcast data is not permitted to cross a networkboundary, the multicast or broadcast feed may be converted to a unicastfeed and distributed to a device on the other side of a networkboundary. The receiving device may then multicast or broadcast the datait received. Unicast may also be used even if multicasting orbroadcasting is possible. For example, data may be transmitted in aunicast fashion if the number of devices attempting to download the datais small or if a carousel directory has not yet been established.

In some embodiments, data carousels, including, for example, multicastdata carousels, may be created on-demand in response to a request from aclient. For example, content may be distributed from a central server toone or more regional servers in response to a request from a regionalserver. Similarly, the number or devices dedicated to distributingcarousels for a particular piece of data may vary depending on thenumber of clients seeking to receive the data. For example, the tree ofcarousels that distribute a first file, which is in low demand, may onlyhave a depth of 2. But if the demand for the file increases, the maximumdepth of the tree may increase. Similarly, some carousels may be addedto the tree even without changing the maximum depth.

Reducing the distance between the transmitter of a data carousel and theclient of a data carousel may reduce the total amount of network trafficneeded to distribute a file. Reducing the distance between thetransmitter of a data carousel and the client of a data carousel mayalso reduce the likelihood of transmission errors by reducing thelikelihood that the data will encounter a congested portion of anetwork. An explicit preference for local carousels may be added to step707 of the process described above with respect to FIG. 7 in order toencourage accesses to local carousels. For example, non-local carouselsmay be selected only if local carousels are not available, or the amountof non-duplicative data from a local carousel may be given twice theweight of non-duplicative data from a non-local carousel. Knowledge ofwhether a carousel is local may be pre-defined (for example, based on IPaddress), or it may be calculated based on, for example, the number ofhops required to reach a carousel or the latency of communications withthe carousel.

The above-described systems for distributing data may be used in a widevariety of environments. Examples include any time a centralized serverdistributes data to a large number of users. For example, networkoperators often send files, such a video files, from a central server toa variety of regional servers, such as servers that provide video ondemand to end-users. Data carousels may be used to make the distributionof video files to regional servers and/or to end-users more efficient.

In some networks, enabling end-user-to end-user communications using thesystems described above may be additionally advantageous because it mayhelp reduce the amount to traffic flowing over a congested portion of anetwork. For example, a service provider may provide a relativelylow-bandwidth data connection along the “last mile” between an end-userand the service provider's distribution network. There may be multipleend users on the other side of the relatively-limited “last mile” link.Data may be transferred between these end-users without burdening the“last mile” link. For example, files may be distributed betweenresidents of an apartment or dormitory without traversing the “lastmile” link back to the rest of the service provider's network. Anotherexample is that files may be distributed between the members of awireless network without traversing the “last mile” link back to therest of the service provider's network. A service provider may choose toprovide wireless networks from user devices to encourage such sharing.These wireless networks may be accessible to, for example, allsubscribers of the service provider's network. These morewidely-available wireless networks may be provided in addition to anindividual users' private wireless networks.

FIG. 8 illustrates an example of general hardware and softwarestructures that may be used to implement any of the various computingdevices discussed above, such as device 210, any device that hostsand/or receives carousels, and any device that hosts a carouseldirectory. The computing device 800 may include one or more processors801, which may execute instructions of a computer program to perform anyof the features described herein. The instructions may be stored in anytype of computer-readable medium or memory, to configure the operationof the processor 801. For example, instructions may be stored in aread-only memory (ROM) 802, random access memory (RAM) 803, removablemedia 804, such as a Universal Serial Bus (USB) drive, compact disk (CD)or digital versatile disk (DVD), floppy disk drive, or any other desiredelectronic storage medium. Instructions may also be stored in anattached (or internal) hard drive 805. The computing device 800 mayinclude one or more output devices, such as a display 806 (or anexternal television), and may include one or more output devicecontrollers 807, such as a video processor. There may also be one ormore user input devices 808, such as a remote control, keyboard, mouse,touch screen, microphone, etc. The computing device 800 may also includeone or more network interfaces, such as input/output circuits 809 (suchas a network card) to communicate with an external network 810. Thenetwork interface may be a wired interface, wireless interface, or acombination of the two. In some embodiments, the interface 809 mayinclude a modem (e.g., a cable modem). Network 810 may includecommunication lines such as optical cables, coaxial cables, Ethernetcables, satellite or other wireless links (including cellular links),etc. Computing device 800 may connect to a plurality of networkssimultaneously. Network interfaces 809 may have dedicated hardware foreach network, or some or all of the hardware may serve multiple networkssimultaneously.

The techniques described herein may be applied in any type of network,including optical networks, wireless networks, such as WiFi, WiMAX,“over the air” television, and cellular networks, satellite networks,hybrid-fiber-coax networks, Ethernet networks, etc. Further, thetechniques described herein may be applied across more than one of typeof network, including across the Internet.

One or more aspects of the disclosure may be embodied in computer-usableor readable data and/or executable instructions, such as in one or moreprogram modules, executed by one or more processors or other devices asdescribed herein. Generally, program modules include routines, programs,objects, components, data structures, etc. that perform particular tasksor implement particular abstract data types when executed by a processorin a computer or other device. The modules may be written in a sourcecode programming language that is subsequently compiled for execution,or may be written in a scripting language such as (but not limited to)HTML or XML. The computer executable instructions may be stored on acomputer readable medium, as described above. As will be appreciated byone of skill in the art, the functionality of the program modules may becombined or distributed as desired in various illustrative embodiments.In addition, the functionality may be embodied in whole or in part infirmware or hardware equivalents such as integrated circuits, fieldprogrammable gate arrays (FPGA), and the like. Particular datastructures may be used to more effectively implement one or more aspectsof the disclosure, and such data structures are contemplated within thescope of executable instructions and computer-usable data describedherein.

Aspects of the disclosure have been described in terms of illustrativeembodiments thereof. While illustrative systems and methods as describedherein embodying various aspects of the present disclosure are shown, itwill be understood by those skilled in the art, that the disclosure isnot limited to these embodiments. Modifications may be made by thoseskilled in the art, particularly in light of the foregoing teachings.For example, each of the features of the aforementioned illustrativeexamples may be utilized alone or in combination or subcombination withelements of the other examples. For example, any of the above describedsystems and methods or parts thereof may be combined with the othermethods and systems or parts thereof described above. For example, oneof ordinary skill in the art will appreciate that the steps describedabove may be performed in other than the recited order, includingconcurrently, and that one or more steps may be optional in accordancewith aspects of the disclosure. It will also be appreciated andunderstood that modifications may be made without departing from thetrue spirit and scope of the present disclosure. The description is thusto be regarded as illustrative instead of restrictive on the presentdisclosure.

What is claimed is:
 1. A method comprising: receiving a first set ofdata at a device, wherein receiving the first set of data comprises:identifying at least a first and a second data carousel, each of whichcontains a different portion of the first set of data; accessing each ofthe first and second data carousels; and receiving, at the device, datatransmitted from each of the first and the second data carousels.
 2. Themethod of claim 1, wherein the method comprises: evaluating the datareceived at the device from the first and the second data carousels toidentify which portions of the first set of data have not been received;identifying at least a third data carousel that contains errorcorrection information calculated from the first set of data; receiving,at the device, the error correction information transmitted from thethird data carousel; and reconstructing the portions of the first set ofdata that have not been received at the device by combining the errorcorrection information with the portions of the first set of data thathave been received at the device.
 3. The method of claim 2, wherein thedevice receives data from both the first and the second data carouselssimultaneously.
 4. The method of claim 2, wherein identifying at least afirst and a second data carousel comprises: receiving, at the device,information that identifies, for a plurality of data carousels, atleast: the portion of the first set of data included in each carousel,and the speed with which data is transmitted from each carousel;determining a rate at which non-duplicative portions of the first set ofdata may be received from several sets of one or more carousels, whereineach carousel in each set is selected from the plurality of datacarousels; and selecting one of said sets of carousels for which thehighest rate was calculated.
 5. The method of claim 1, furthercomprising: transmitting, from the device, a portion of the first set ofdata in a third data carousel.
 6. The method of claim 5, furthercomprising: transmitting, from the device, error correction informationthat corresponds to the first set of data in a fourth data carousel. 7.The method of claim 5, wherein the portion of the first set of dataincluded in the third data carousel is determined by comparing theportions of the first set of data available from other data carousels ona network to a set of information that specifies a topology ofcarousels.
 8. The method of claim 5, wherein the portion of the firstset of data included in the third data carousel is determined byreceiving an indication of the portion to include in the third datacarousel from a second device that organizes the carousels transmittedfrom several devices according to a set of data that describes atopology of carousels.
 9. The method of claim 2, wherein the errorcorrection information comprises Reed-Solomon error correcting codes.10. The method of claim 5, further comprising: stopping transmission ofthe third data carousel from the device in response to a change in theportions of the first set of data available from other data carousels ona network from when the third data carousel was initially transmitted;and beginning transmission of a fourth data carousel from the device,wherein the fourth data carousel contains a different portion of thefirst set of data than the third data carousel.
 11. The method of claim1, wherein the first set of data is file-based data.
 12. A methodcomprising: transmitting a first set of data to a first device, whereintransmitting the first set of data comprises: transmitting at least afirst and a second data carousel, each of which contains a differentportion of the first set of data; receiving, from the first device, arequest for the first set of data; and transmitting to the first device,responsive to the request, an indication of a plurality of datacarousels that are transmitting at least a portion of the first set ofdata, wherein the plurality of data carousels includes said first andsecond data carousels.
 13. The method of claim 12, wherein the first andsecond data carousels are multicast data carousels.
 14. A methodcomprising: receiving, at a first device, a message from a second devicethat identifies a first set of data; transmitting to the second devicean indication of a plurality of data carousels that are transmitting atleast a portion of the first set of data; receiving, at the firstdevice, an indication that the second device has received at least aportion of the first set of data; and transmitting, from the firstdevice, an instruction to the second device to transmit a data carousel,wherein the instruction indicates a portion of the first set of data toinclude in said carousel to be transmitted from said second device. 15.The method of claim 14, further comprising: transmitting, from the firstdevice, instructions to a plurality of additional devices, theinstructions to the additional devices indicating portions of the firstset of data to be transmitted from the additional devices in datacarousels; wherein said instructions to the second device and theplurality of additional devices instruct that data carousels beconfigured such that each data carousel individually includes less thanall of the first set of data, but the carousels, in combination, includeall of the first set of data.
 16. The method of 15, further comprising:transmitting, from the first device, instructions indicating portions oferror correction information calculated from the first set of data to betransmitted in data carousels.
 17. The method of 15, further comprising:receiving, at the first device, information that specifies a topologyfor data carousels; wherein the portions of the first set of data to betransmitted from the additional devices are calculated such that thedata carousels conform to the specified topology.
 18. The method ofclaim 15, further comprising: transmitting, from the first device, adata carousel containing at least a portion of the first set of data.19. The method of claim 14, further comprising: instructing the seconddevice to stop transmitting said portion of the first set of data and toinstead transmit a data carousel containing another portion of the firstset of data.
 20. The method of claim 14, further comprising: configuringa DNS record to resolve to a network address of the first device.